package com.principle.inversion;

/**
 * 依赖倒转原则
 * 比如通过Email接收消息
 */
public class DependenceInverse2 {
    public static void main(String[] args) {
        Persion2 persion2 = new Persion2();
        persion2.receive(new Email2());
        persion2.receive(new WeChat2());
    }
}

interface IReceiver{
    String getMessage();
}

class Email2 implements IReceiver{
    @Override
    public String getMessage() {
        return "电子邮件信息：hello world !";
    }
}

class WeChat2 implements IReceiver{

    @Override
    public String getMessage() {
        return "微信消息：Lets Chat !";
    }
}

/**
 * 接受消息的方法确实很简单，但是receive的入参是一个具体对象，耦合严重
 * 如果是从微信对象产生的信息，需要创建新的类，并且还要修改，Person类中的代码
 *
 * 解决方法 ：
 *   让receive入参变为一个抽象接口IReceiver，电子邮件或者微信实现抽象接口，实现依赖反转
 */
class Persion2{
    public void receive(IReceiver receiver){
        System.out.println(receiver.getMessage());
    }
}

